home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs54.d81 / sgtool15.lzh / VDCELLIP.C < prev    next >
Text File  |  2009-10-10  |  1KB  |  65 lines

  1. /*
  2. SG C Tools 1.5
  3.  
  4. (C) 1993 Steve Goldsmith
  5. All Rights Reserved
  6.  
  7. Compiled with HI-TECH C 3.09 (CP/M-80).
  8. */
  9.  
  10. #include <hitech.h>
  11. #include <vdc.h>
  12.  
  13. /* draw ellipse */
  14.  
  15. void ellipsevdc(int XC, int YC, int A, int B)
  16. {
  17.   int X, Y;
  18.   long AA, AA2, BB, BB2, D, DX, DY;
  19.  
  20.   X = 0;
  21.   Y = B;
  22.   AA = (long) A*A;
  23.   AA2 = AA << 1;
  24.   BB = (long) B*B;
  25.   BB2 = BB << 1;
  26.   D = BB-AA*B+AA >> 2;
  27.   DX = 0;
  28.   DY = AA2*B;
  29.   setpixvdc(XC,YC-Y);
  30.   setpixvdc(XC,YC+Y);
  31.   while (DX < DY)
  32.   {
  33.     if (D > 0)
  34.     {
  35.       Y--;
  36.       DY -= AA2;
  37.       D -= DY;
  38.     }
  39.     X++;
  40.     DX += BB2;
  41.     D += (BB+DX);
  42.     setpixvdc(XC+X,YC+Y);
  43.     setpixvdc(XC-X,YC+Y);
  44.     setpixvdc(XC+X,YC-Y);
  45.     setpixvdc(XC-X,YC-Y);
  46.   }
  47.   D += (3*(AA-BB)/2-(DX+DY))/2;
  48.   while (Y > 0)
  49.   {
  50.     if (D < 0)
  51.     {
  52.       X++;
  53.       DX += BB2;
  54.       D += (BB+DX);
  55.     }
  56.     Y--;
  57.     DY -= AA2;
  58.     D += (AA-DY);
  59.     setpixvdc(XC+X,YC+Y);
  60.     setpixvdc(XC-X,YC+Y);
  61.     setpixvdc(XC+X,YC-Y);
  62.     setpixvdc(XC-X,YC-Y);
  63.   }
  64. }
  65.